//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: CurrIntegral.h
//创建人  	: Handry
//创建日期	:
//描述	    : 电流积分模块头文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================
#ifndef _CURRINTEGRAL_H
#define _CURRINTEGRAL_H

//=============================================================================================
//包含头文件
//=============================================================================================
#include "BSPTypedef.h"

//=============================================================================================
//宏参数设定
//=============================================================================================
#define CURR_INT_TICK             10                          //积分任务运行的周期，单位ms

//10ms周期下
#define TRAN_10MA10MS_TO_MAH      36000      //1mAH转化为10ma10ms的倍率

#define TRAN_MW1MS_TO_WMS         1000       //1WMS转化为1mw1ms(1ma1V1ms)的倍率
#define TRAN_W1MS_TO_WH           3600000    //1WH转化为1W1ms(1AV1ms)的倍率
#define TRAN_0_1MA_TO_10MA        100         //0.1mA转换为10mA
 
#define CURR_INT_IDLE_POINT       5          //电流小于此值，不进行积分     

#define HISCAP_CHANG_TO_WRITE_EEP 1000       //历史电量进行写EEP变化量(单位:1mAH)


#if defined(SY_PB_32000MAH_14S) || defined(SY_PB_32000MAH_16S) || defined(SY_PB_32000MAH_17S)
//#define ENABLE_CALC_STANDBY_CURR           //是否允许计算板子消耗电流，允许则定义，否则注释
#elif defined(LFP_TB_20000MAH_20S) || defined(LFP_HL_25000MAH_16S) || defined(LFP_GF_25000MAH_16S) || defined(LFP_PH_20000MAH_20S)
#define ENABLE_CALC_STANDBY_CURR           //是否允许计算板子消耗电流，允许则定义，否则注释
#endif

#define SLEEP_PWR_CURR            0.25       //睡眠平均电流，单位mA
#define WORK_PWR_CURR             110        //工作平均电流，单位0.1mA
#define WORK_CURR_WITH_EXMODULE   250        //带工作外置模块工作平均电流，单位0.1mA
#define WORK_CURR_WITH_SLEEP_EXMODULE   130  //带休眠外置模块工作平均电流，单位0.1mA

//=============================================================================================
//定义数据类型
//=============================================================================================
typedef struct                   //电量积分结构体
{
	u32 ChgCap10ma10ms;          //充电电量积分量(单位:10mA10ms)
	u32 DchgCap10ma10ms;         //放电电量积分量(单位:10mA10ms)
	u32 ChgCap1ma1h;             //充电电量积分量(单位:1mAH)
	u32 DchgCap1ma1h;            //放电电量积分量(单位:1mAH)
	s32 ChangeCap1ma1h;          //充放电电量变化量(单位:1mAH,正数表充电,负数表放电)
}t_CAPINT;

typedef struct                  //电流积分结构体
{
	u32 ChgEner1w1ms;           //充电电能积分量(单位:1w1ms,即1AV10ms)
	u32 DchgEner1w1ms;          //放电电能积分量(单位:1w1ms,即1AV10ms)
	u32 ChgEner1w1h;            //充电电能积分量(单位:1WH)
	u32 DchgEner1w1h;           //放电电能积分量(单位:1WH)
	s32 ChangEner1w1h;          //充放电电能变化量(单位:1WH,正数表充电,负数表放电)
}t_ENERINT;

typedef struct                   //电量积分结构体
{
	u32 HisChgCap;              //充电电量积分量(单位:1mAH)
	u32 HisDchgCap;             //放电电量积分量(单位:1mAH)
}t_HISCAP;

typedef struct                   //睡眠静置容量积分结构体
{
    u8 isSlpCap;                 //是否是睡眠容量
	u32 SlpStartTim;             //静置起始时间，秒
	float SlpInte;               //静置间隔时长，小时
    float SlpCap;                //静置消耗的容量
}t_SLEEPCAP;

//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	:  void CurrentIntTask()
//输入参数	:  void
//输出参数	:  void
//函数功能	:  积分任务
//注意事项	:  10ms调用
//=============================================================================================
void CurrentIntTask(void);

//=============================================================================================
//函数名称	:  void HisCapCalcTask(void)
//输入参数	:  void
//输出参数	:  void
//函数功能	:  历史充放电电量计算任务
//注意事项	:  100ms调用
//=============================================================================================
void HisCapCalcTask(void);

//=============================================================================================
//函数名称	:  void ChgCapIntTask(u32 curr)
//输入参数	:  curr:采样电流值(单位10mA)
//输出参数	:  void
//函数功能	:  充电电量积分任务
//注意事项	:  10ms调用
//=============================================================================================
void ChgCapIntTask(u32 curr);

//=============================================================================================
//函数名称	:  void DchgCapIntTask(u32 curr)
//输入参数	:  curr:采样电流值(单位10mA)
//输出参数	:  void
//函数功能	:  放电电量积分任务
//注意事项	:  10ms调用
//=============================================================================================
void DchgCapIntTask(u32 curr);

//=============================================================================================
//函数名称	:  void ChgEnerIntTask(u32 curr, u16 volt)
//输入参数	:  curr:采样电流值(单位10mA), volt采样电压值(单位:10mV)
//输出参数	:  void
//函数功能	:  充电电能积分任务
//注意事项	:  10ms调用
//=============================================================================================
void ChgEnerIntTask(u32 curr, u16 volt);

//=============================================================================================
//函数名称	:  void DchgEnerIntTask(u32 curr, u16 volt)
//输入参数	:  curr:采样电流值(单位10mA), volt采样电压值(单位:10mV)
//输出参数	:  void
//函数功能	:  放电电能积分任务
//注意事项	:  10ms调用
//=============================================================================================
void DchgEnerIntTask(u32 curr, u16 volt);

//=============================================================================================
//函数名称	:  u32 GetChgIntCap(void)
//输入参数	:  void
//输出参数	:  充电积分电量值(单位:1mAH)
//函数功能	:  获取充电积分电量值
//注意事项	:  
//=============================================================================================
u32 GetChgIntCap(void);

//=============================================================================================
//函数名称	:  u32 GetDchgIntCap(void)
//输入参数	:  void
//输出参数	:  放电积分电量值(单位:1mAH)
//函数功能	:  获取放电积分电量值
//注意事项	:  
//=============================================================================================
u32 GetDchgIntCap(void);

//=============================================================================================
//函数名称	:  s32 GetChgDchgChangCap(void)
//输入参数	:  void
//输出参数	:  充放电电量变化值(单位:1mAH,正数为充电量,负数为放电量)
//函数功能	:  获取充放电电量变化值
//注意事项	:  
//=============================================================================================
s32 GetChgDchgChangCap(void);

//=============================================================================================
//函数名称	:  u32 GetChgIntEner(void)
//输入参数	:  void
//输出参数	:  充电积分电能值(单位:1WH)
//函数功能	:  获取充电积分电能值
//注意事项	:  
//=============================================================================================
u32 GetChgIntEner(void);

//=============================================================================================
//函数名称	:  u32 GetDchgIntEner(void)
//输入参数	:  void
//输出参数	:  放电积分电能值(单位:1WH)
//函数功能	:  获取放电积分电能值
//注意事项	:  
//=============================================================================================
u32 GetDchgIntEner(void);

//=============================================================================================
//函数名称	:  s32 GetChgDchgChangEner(void)
//输入参数	:  void
//输出参数	:  充放电电能变化值(单位:1WH,正数为充电能,负数为放电能)
//函数功能	:  获取充放电电能变化值
//注意事项	:  
//=============================================================================================
s32 GetChgDchgChangEner(void);

//=============================================================================================
//函数名称	:  u32 GetHisChgCap(void)
//输入参数	:  void
//输出参数	:  历史充电电量(mAH)
//函数功能	:  获取历史充电电量
//注意事项	:  
//=============================================================================================
u32 GetHisChgCap(void);

//=============================================================================================
//函数名称	:  u32 GetHisDchgCap(void)
//输入参数	:  void
//输出参数	:  历史充电电量(mAH)
//函数功能	:  获取历史放电电量
//注意事项	:  
//=============================================================================================
u32 GetHisDchgCap(void);

//=============================================================================================
//函数名称	:  u32 SetHisChgCap(u32 cap)
//输入参数	:  cap：写入的历史充电电量
//输出参数	:  void
//函数功能	:  写历史充电电量
//注意事项	:  
//=============================================================================================
void SetHisChgCap(u32 cap);

//=============================================================================================
//函数名称	:  u32 SetHisDchgCap(u32 cap)
//输入参数	:  cap：写入的历史放电电量
//输出参数	:  void
//函数功能	:  写历史放电电量
//注意事项	:  
//=============================================================================================
void SetHisDchgCap(u32 cap);

//=============================================================================================
//函数名称	:  void CurrIntegralStartSleep(void)
//输入参数	:  void
//输出参数	:  void
//函数功能	:  开始睡眠，计算起始条件
//注意事项	:  
//=============================================================================================
void CurrIntegralStartSleep(void);

//=============================================================================================
//函数名称	:  void CurrIntegralEndSleep(void)
//输入参数	:  void
//输出参数	:  void
//函数功能	:  结束睡眠，计算睡眠电量
//注意事项	:  
//=============================================================================================
void CurrIntegralEndSleep(void);

#endif

/*****************************************end of CurrIntegral.h*****************************************/
